package model

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"myplatform/config"
)

//// orm：对象关系映射
//// 用gorm，不用和复杂的sql语句打交道
//// 创建函数去连接数据库
//func OpenDB() *gorm.DB {
//	//连接数据库的url地址 用户名：密码@tcp（数据库地址）/数据库
//	sql_url := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=%t&loc=%s",
//		viper.GetString("db.username"),
//		viper.GetString("db.password"),
//		viper.GetString("db.addr"),
//		viper.GetString("db.name"),
//		true,
//		"Local",
//	)
//	fmt.Println(sql_url)
//	db, err := gorm.Open("mysql", sql_url)
//	if err != nil {
//		fmt.Println("Database connection failed", err)
//	} else {
//		fmt.Println("Database connection success!")
//	}
//	return db
//}

// 适应k8s项目做出修改
func InitDB(cfg *config.Config) *gorm.DB {
	sql_url := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local",
		cfg.DB.Username,
		cfg.DB.Password,
		cfg.DB.Addr, // 格式应为 "host:port"，例如 "mysql:3306"
		cfg.DB.Name,
	)
	db, err := gorm.Open("mysql", sql_url)
	if err != nil {
		fmt.Println("Database connection failed", err)
	} else {
		fmt.Println("Database connection success!")
	}
	return db
}

type Database struct {
	Self *gorm.DB
	//docker *gorm.DB

}

var DB *Database

func Init() {
	//k8s新增：数据库变量信息初始化
	conf := config.Config{}
	conf.InitConfig()

	DB = &Database{
		//Self: OpenDB(), //创建数据库连接
		Self: InitDB(&conf), //创建数据库连接k8s修改版
	}
	//automigrate 自动将程序定义好的数据模型迁移到数据库

	DB.Self.AutoMigrate(&UserModel{}, &UserInfoModel{}, &Post{}, &PostType{}, &Comment{}, &Like{}, &Collect{}) //UserModel{}实例化
}

// 关闭数据库连接
func Close() {
	DB.Self.Close()
	//DB.Flask.Close()
}
